package br.com.sistema.view;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

import br.com.sistema.entidade.Cliente;
import br.com.sistema.entidade.Produto;
import br.com.sistema.entidade.Venda;
import br.com.sistema.util.Fachada;

@ManagedBean(name = "beanVenda")
@ViewScoped
public class VendasBean implements Serializable {

	private static final long serialVersionUID = 1L;
	
	private Cliente clienteSelecionado;
	private Produto produtoSelecionado = new Produto();
	private List<Produto> carrinhoCompras = new ArrayList<Produto>();
	private List<Produto> listaDeProduto = null;
	private List<SelectItem> clienteSelect;
	private List<Venda> listaVendas = new ArrayList<Venda>();
	private Double valorTotal = 0d;
	private Venda vendaSelecionada = new Venda();
	private Date dataInicial, dataFinal;
	private String flagStatusVenda = "2";

//	public VendasBean() {
//		this.listaVendas = Fachada.getInstancia().listarVenda();
//	}
	
	// Get's e Set's
	public Cliente getClienteSelecionado() {
		return clienteSelecionado;
	}

	public void setClienteSelecionado(Cliente clienteSelecionado) {
		this.clienteSelecionado = clienteSelecionado;
	}

	public Produto getProdutoSelecionado() {
		return produtoSelecionado;
	}

	public void setProdutoSelecionado(Produto produtoSelecionado) {
		this.produtoSelecionado = produtoSelecionado;
	}

	public List<Produto> getCarrinhoCompras() {
		return carrinhoCompras;
	}

	public void setCarrinhoCompras(List<Produto> carrinhoCompras) {
		this.carrinhoCompras = carrinhoCompras;
	}

	public Double getValorTotal() {
		return valorTotal;
	}

	public void setValorTotal(Double valorTotal) {
		this.valorTotal = valorTotal;
	}

	public List<SelectItem> getClienteSelect() {
		return clienteSelect;
	}

	public void setClienteSelect(List<SelectItem> clienteSelect) {
		this.clienteSelect = clienteSelect;
	}

	public Venda getVendaSelecionada() {
		return vendaSelecionada;
	}

	public void setVendaSelecionada(Venda vendaSelecionada) {
		this.vendaSelecionada = vendaSelecionada;
	}

	public Date getDataInicial() {
		return dataInicial;
	}

	public void setDataInicial(Date dataInicial) {
		this.dataInicial = dataInicial;
	}

	public Date getDataFinal() {
		return dataFinal;
	}

	public void setDataFinal(Date dataFinal) {
		this.dataFinal = dataFinal;
	}
	
	public String getFlagStatusVenda() {
		return flagStatusVenda;
	}

	public void setFlagStatusVenda(String flagStatusVenda) {
		this.flagStatusVenda = flagStatusVenda;
	}

	public List<Venda> getListaVendas() {
		return listaVendas;
	}

	public void setListaVendas(List<Venda> listaVendas) {
		this.listaVendas = listaVendas;
	}
	
	public List<Produto> getListaDeProduto() {
		if(listaDeProduto == null){
			this.listaDeProduto = Fachada.getInstancia().listarProduto();
		}
		return this.listaDeProduto;
	}

	public void setListaDeProduto(List<Produto> listaDeProduto) {
		this.listaDeProduto = listaDeProduto;
	}

	public List<Cliente> getListaCliente() {
		return Fachada.getInstancia().listarCliente();
	}

	public String buscarProduto() {
		if (this.produtoSelecionado != null) {
			this.carrinhoCompras.add(this.produtoSelecionado);
			System.out.println(this.produtoSelecionado.getValor());
			calculaTotal(carrinhoCompras);
		}
		return null;
	}

	private void calculaTotal(List<Produto> lista) {
		this.valorTotal = Fachada.getInstancia().calcularTotal(lista);
	}
	
	private void calcularTotalVenda(List<Venda> lista){
		this.valorTotal = Fachada.getInstancia().calcularTotalVenda(lista);
	}

	public String removerProdutoCarrinho() {
		if (this.carrinhoCompras != null && !this.carrinhoCompras.isEmpty()) {
			if (this.produtoSelecionado != null) {
				this.carrinhoCompras.remove(produtoSelecionado);
				calculaTotal(carrinhoCompras);
			}
		}
		return null;
	}

	public String finalizarVenda() {
		Venda venda = new Venda();
		venda.setCliente(clienteSelecionado);
		venda.setProduto(carrinhoCompras);
		venda.setValorTotal(valorTotal);	
		Fachada.getInstancia().salvarVenda(venda);
		this.listaDeProduto = null;
		this.carrinhoCompras = new ArrayList<Produto>();
		return null;
	}

	public String buscarVendas(){
		this.listaVendas = null;
		this.listaVendas = Fachada.getInstancia().buscarVendas(dataInicial, dataFinal, flagStatusVenda);
		calcularTotalVenda(listaVendas);
		return null;
	}

	public String cancelarVenda(){
		Fachada.getInstancia().cancelarVenda(vendaSelecionada);
		return null;
	}
	
	public String buscarPorID(){
		this.listaVendas = null;
		this.listaVendas = Fachada.getInstancia().buscarPorID(vendaSelecionada.getVendaId());
		return null;
	}
	
	public String formVenda() {
		return "formVenda?faces-redirect=true";
	}

	public String formListaVenda() {
		return "formListaVenda?faces-redirect=true";
	}
	
	public String formCancelarVenda(){
		return "formCancelarVenda?faces-redirect=true";
	}
}
